/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.cef.generator.coreGenerator.base.entitygen.property;

import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
import com.inspur.edp.cef.generator.coreGenerator.base.entitygen.field.ChildFieldGenerator;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.NumberLiteral;

public class EnumChildFieldGenerator extends ChildFieldGenerator {

  private String fieldName;
  private TypeInfo returnType;
  private int defaultValue;
  private boolean isDefaultNull;

  public EnumChildFieldGenerator(String fieldName, TypeInfo returnType, int defaultValue) {
    this(fieldName, returnType, defaultValue, false);
  }

  public EnumChildFieldGenerator(String fieldName, TypeInfo returnType, int defaultValue, boolean isDefaultNull) {
    super(fieldName, returnType);
    this.fieldName = fieldName;
    this.returnType = returnType;
    this.defaultValue = defaultValue;
    this.isDefaultNull = isDefaultNull;
  }

  @Override
  protected Expression buildGetMethodBody() {
    if(this.isDefaultNull)
      return ast.newNullLiteral();
    MethodInvocation methodInvocation = ast.newMethodInvocation();
    methodInvocation.setExpression(ast.newName(returnType.getTypeName()));
    methodInvocation.setName(ast.newSimpleName("forValue"));
    NumberLiteral numberLiteral = ast.newNumberLiteral();
    numberLiteral.setToken(Integer.toString(defaultValue));
    methodInvocation.arguments().add(numberLiteral);
    return methodInvocation;
  }
}
